package com.redis.seckill.aspectJ;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.redis.seckill.entity.Product;
import com.redis.seckill.service.ProductService;
import com.redis.seckill.utils.RedisUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @date 2020/10/28 14:27
 */
@Aspect
@Component
public class MyOrderAspectJ {

    @Autowired
    private RedisUtil redisUtil;

    @Autowired
    private ProductService productService;


    /**
     * 设置商品getOne切点
     */
    @Pointcut("execution(* com.redis.seckill.controller.ProductController.get One(..))")
    public void productInfo(){}

    /**
     * 开启秒杀之前将商品信息存到redis中。
     */
    @AfterReturning(pointcut = "productInfo()")
    public void saveProduct(JoinPoint joinPoint){
//        获取拦截方法的参数列表，这里的参数只有一个商品id
        Object[] args = joinPoint.getArgs();

//        得到商品id
        Integer productId = (Integer) args[0];

//        判断是否有该商品的key
        if (!redisUtil.hasKey("productInfo"+productId)){
//        将商品信息存到redis中。
            redisUtil.set("productInfo"+productId,
                    JSON.toJSON(productService.getOne(new QueryWrapper<Product>().eq("product_id",productId))));
        }

    }
}
